package com.imut.lagain.service;
import org.slf4j.LoggerFactory;

import java.util.Map;
import java.util.concurrent.CompletableFuture;

/**
 * 短信服务接口
 * 提供短信发送功能
 */
public interface ISmsService {
    
    /**
     * 发送短信
     * @param phone 手机号
     * @param templateId 模板ID
     * @param params 模板参数
     * @return 是否发送成功
     */
    boolean sendSms(String phone, String templateId, Map<String, String> params);
    
    /**
     * 异步发送短信
     * @param phone 手机号
     * @param templateId 模板ID
     * @param params 模板参数
     * @return CompletableFuture<Boolean>
     */
    CompletableFuture<Boolean> sendSmsAsync(String phone, String templateId, Map<String, String> params);
    
    /**
     * 发送验证码短信
     * @param phone 手机号
     * @param code 验证码
     * @return 是否发送成功
     */
    boolean sendVerificationCode(String phone, String code);
    
    /**
     * 发送登录验证码
     * @param phone 手机号
     * @param code 验证码
     * @return 是否发送成功
     */
    boolean sendLoginCode(String phone, String code);
    
    /**
     * 发送注册验证码
     * @param phone 手机号
     * @param code 验证码
     * @return 是否发送成功
     */
    boolean sendRegisterCode(String phone, String code);
    
    /**
     * 发送密码重置验证码
     * @param phone 手机号
     * @param code 验证码
     * @return 是否发送成功
     */
    boolean sendPasswordResetCode(String phone, String code);
    
    /**
     * 发送胶囊开启通知短信
     * @param phone 手机号
     * @param capsuleTitle 胶囊标题
     * @return 是否发送成功
     */
    boolean sendCapsuleOpenNotification(String phone, String capsuleTitle);
    
    /**
     * 发送胶囊开启提醒短信
     * @param phone 手机号
     * @param capsuleTitle 胶囊标题
     * @param daysLeft 剩余天数
     * @return 是否发送成功
     */
    boolean sendCapsuleOpenReminder(String phone, String capsuleTitle, int daysLeft);
    
    /**
     * 发送系统通知短信
     * @param phone 手机号
     * @param message 通知消息
     * @return 是否发送成功
     */
    boolean sendSystemNotification(String phone, String message);
    
    /**
     * 发送安全警告短信
     * @param phone 手机号
     * @param alertType 警告类型
     * @param alertMessage 警告消息
     * @return 是否发送成功
     */
    boolean sendSecurityAlert(String phone, String alertType, String alertMessage);
    
    /**
     * 检查短信服务是否可用
     * @return 是否可用
     */
    boolean isSmsServiceAvailable();
    
    /**
     * 检查发送频率限制
     * @param phone 手机号
     * @return 是否允许发送
     */
    boolean checkRateLimit(String phone);
    
    /**
     * 验证手机号格式
     * @param phone 手机号
     * @return 是否有效
     */
    boolean isValidPhone(String phone);
    
    /**
     * 获取短信统计信息
     * @param phone 手机号
     * @return 统计信息
     */
    Map<String, Object> getSmsStats(String phone);
    
    /**
     * 发送胶囊提醒短信
     * @param phone 手机号
     * @param capsuleTitle 胶囊标题
     * @param message 提醒消息
     * @return 是否发送成功
     */
    boolean sendCapsuleReminder(String phone, String capsuleTitle, String message);
}
